// 冒泡排序
export function bubbleSort(inputArray) {
  const len = inputArray.length;
  for (let i = 0; i < len - 1; i++) {
    for (let j = 0; j < len - 1 - i; j++) {
      if (inputArray[j] > inputArray[j + 1]) {
        [inputArray[j], inputArray[j + 1]] = [inputArray[j + 1], inputArray[j]];
      }
    }
  }
}

// 快速排序
export function quickSort(inputArray) {
  if (inputArray.length <= 1) return inputArray;
  const pivot = inputArray[Math.floor(inputArray.length / 2)];
  const left = inputArray.filter((item) => item < pivot);
  const right = inputArray.filter((item) => item > pivot);
  return [...quickSort(left), pivot, ...quickSort(right)];
}

// 选择排序
export function selectionSort(inputArray) {
  const len = inputArray.length;
  for (let i = 0; i < len - 1; i++) {
    let minIndex = i;
    for (let j = i + 1; j < len; j++) {
      if (inputArray[j] < inputArray[minIndex]) {
        minIndex = j;
      }
    }
    [inputArray[i], inputArray[minIndex]] = [
      inputArray[minIndex],
      inputArray[i],
    ];
  }
}

// 插入排序
export function insertionSort(inputArray) {
  const len = inputArray.length;
  for (let i = 1; i < len; i++) {
    const current = inputArray[i];
    let j = i - 1;
    while (j >= 0 && inputArray[j] > current) {
      inputArray[j + 1] = inputArray[j];
      j--;
    }
    inputArray[j + 1] = current;
  }
}
